﻿using strange.extensions.context.api;
using strange.extensions.context.impl;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Demo1MVCSContext : MVCSContext {

	public Demo1MVCSContext(MonoBehaviour view) : base(view) { }

    //进行绑定映射
    protected override void mapBindings()
    {
        //model


        //serivce 
        //注入绑定injectionbinding主要是用来绑定该类型对象到上下文，这样使得程序中各个地方可以通过contextview访问得到该对象。这种绑定会生成对象。这种绑定是为了生成对象并且注入到指定对象中用的
        //[Inject]标签实现接口，而不是实例化类
        injectionBinder.Bind<IScoreService>().To<ScoreService>().ToSingleton();//单例模式的

        //command 只要dispatcher了Demo1CommandEvent.RequestScore这个枚举，那么就会自动调用RequestScoreCommand方法
        //commandbinding是为了将命令绑定到方法中用的
        commandBinder.Bind(Demo1CommandEvent.RequestScore).To<RequestScoreCommand>();

        //mediator 绑定两个类，一个类被创建时另一个类自动创建。
        //mediationbing则是为了拦截view消息，而将view注入中介mediator中，然后在view的awake方法里面生成meidtaor对象
        mediationBinder.Bind<CubeView>().To<CubeMediator>();//完成view和mediator的绑定，绑定后就会cube自动挂载脚本med


        //创建一个startcommand
        commandBinder.Bind(ContextEvent.START).To<StartCommand>().Once();


    }
}
